package top.rainbowecho.article.vo;

import com.fasterxml.jackson.annotation.JsonView;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import top.rainbowecho.model.view.ArticleDetailView;
import top.rainbowecho.model.view.MicroArticleView;
import top.rainbowecho.model.vo.ReplyTreeVo;

import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 文章信息的视图类
 *
 * @author rainbow
 * @since 2020/8/12 17:17
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class ArticleInfoVo implements Serializable {
    private static final long serialVersionUID = 2592932931603568991L;

    /**
     * 文章主键
     */
    @JsonView(MicroArticleView.class)
    private String id;

    /**
     * 图片封面url，新建时随机选取
     */
    @JsonView(MicroArticleView.class)
    private String cover;

    /**
     * 文章文本
     */
    @JsonView(ArticleDetailView.class)
    private String text;

    /**
     * 文章标题，最多只能包含40个字符
     */
    @JsonView(MicroArticleView.class)
    private String title;

    /**
     * 文章的摘要
     */
    @JsonView(MicroArticleView.class)
    private String summary;

    /**
     * 浏览数
     */
    @JsonView(MicroArticleView.class)
    private Integer browseCount;

    /**
     * 最后更新时间
     */
    @JsonView(MicroArticleView.class)
    private LocalDateTime updateTime;

    /**
     * 目录名称
     */
    @JsonView(MicroArticleView.class)
    private String categoryName;

    /**
     * 用户名，长度限制在20个英文字符或10个中文字符
     */
    @JsonView(MicroArticleView.class)
    private String userName;

    /**
     * 用户头像地址
     */
    @JsonView(MicroArticleView.class)
    private String avatar;

    /**
     * 点赞数
     */
    @JsonView(MicroArticleView.class)
    private Long likeCount;

    /**
     * 回复数
     */
    @JsonView(MicroArticleView.class)
    private Long replyCount;

    /**
     * 标签名称
     */
    @JsonView(MicroArticleView.class)
    private String tagName;

    /**
     * 该用户是否点赞过
     */
    @JsonView(ArticleDetailView.class)
    private Boolean isLike;

    /**
     * 文章的评论以及回复
     */
    @JsonView(ArticleDetailView.class)
    private List<ReplyTreeVo> replies;
}
